package com.novel.service;

import java.io.IOException;
import java.util.Random;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.safety.Whitelist;
import org.jsoup.select.Elements;

import com.novel.bean.BookBean;
import com.novel.bean.CrawlerBean;
import com.novel.bean.SectionBean;
import com.novel.utils.DateTime;
import com.novel.utils.StringUtils;

public class CrawlerHelper {

	public static BookBean getBookInfo(Document doc,CrawlerBean bean){
		BookBean book = new BookBean();
		String name = bean.getBooknameelement();
		String author = bean.getAuthorelement();
		String intro = doc.select(bean.getIntroduceelement()).html();
		String over = bean.getOverstateelement();
		Elements e = doc.select(bean.getCoverimgelement());
		String cover = e.attr("src");
		int serialize = Integer.parseInt(over);
		book.setAuthor(author);
		book.setCategoryid((long)1);
		book.setCover(cover);
		book.setName(name);
		book.setCreatetime(DateTime.getNowString());
		book.setSerialize(serialize);
		book.setIntro(intro);
		return book;
	}

	public static String getFirstSec(String url, CrawlerBean bean) {
		Document doc;
		String content;
		String pre_url = url.substring(0,url.lastIndexOf("."));
		String after_url = url.substring(url.lastIndexOf("."));
		Random r= new Random();
		try {
//			doc = Jsoup.connect(url).get();
			doc = Jsoup.connect(url).timeout(30000).cookie("111", "111").userAgent(useragents[r.nextInt(17)]).get();
			Elements eles = doc.select(bean.getContentelement());
			String secname = doc.select(bean.getSecnameelement()).html();
			if(secname.contains("章")){
				secname = secname.substring(secname.indexOf("章")+1);
			}else{
				secname = StringUtils.deleteNum(secname);
			}
			content = eles.html();
			Elements e;
			if(bean.isMultipage()){
				for(int i=2; i<=bean.getPagenum();i++){
//					doc = Jsoup.connect(pre_url+bean.getNextpage()+i+after_url).get();
					doc = Jsoup.connect(pre_url+bean.getNextpage()+i+after_url).timeout(30000).cookie("111", "111").userAgent(useragents[r.nextInt(17)]).get();
					e = doc.select(bean.getContentelement());
					content += e.html();
				}
			}
			if(null != bean.getReplacestr()){
				String[] replace = bean.getReplacestr().split(",");
				for(String s : replace){
					content = content.replaceAll(s, "");
				}
			}
			content = Jsoup.clean(content, Whitelist.none().addTags("br").addTags("p"));
		} catch (IOException e) {
			content = "《发生异常》";
			e.printStackTrace();
		}
		return content;
	}
	public static SectionBean getSec(String url,int num, CrawlerBean bean)throws Exception {
		Document doc;
		String content;
		SectionBean section = new SectionBean();
		String pre_url = url.substring(0,url.lastIndexOf("."));
		String after_url = url.substring(url.lastIndexOf("."));
		Random r = new Random();
		try {
			Thread.sleep(1000);
//			doc = Jsoup.connect(url).get();
			doc = Jsoup.connect(url).timeout(30000).cookie("111", "111").userAgent(useragents[r.nextInt(17)]).get();
			Elements eles = doc.select(bean.getContentelement());
			String secname = doc.select(bean.getSecnameelement()).html();
			section.setNum(num);
			if(secname.contains("章")){
				secname = secname.substring(secname.indexOf("章")+1);
			}else{
				secname = StringUtils.deleteNum(secname);
			}
			section.setName(secname);
			section.setCreatetime(DateTime.getNowString());
			content = eles.html();
			Elements e;
			if(bean.isMultipage()){
				for(int i=2; i<=bean.getPagenum();i++){
					Thread.sleep(1000);
					//doc = Jsoup.connect(pre_url+bean.getNextpage()+i+after_url).get();
					doc = Jsoup.connect(pre_url+bean.getNextpage()+i+after_url).timeout(30000).cookie("111", "111").userAgent(useragents[r.nextInt(17)]).get();
					e = doc.select(bean.getContentelement());
					content += e.html();
				}
			}
			if(null != bean.getReplacestr()){
				bean.setReplacestr(bean.getReplacestr()+",<div>,</div>");
				String[] replace = bean.getReplacestr().split(",");
				for(String s : replace){
					content = content.replaceAll(s, "");
				}
			}
			
			section.setContent(content);
		} catch (IOException e) {
			System.out.println("读取章节续页发生异常："+e.toString());
			throw new Exception();
		}
		return section;
	}

	
	private static String[] useragents = new String[]{
			"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
			"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
			"Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
			"Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
			"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
			"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
			"Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
			"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
			"Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
			"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
			"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
			"Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
			"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
			"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
			"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
			"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11",
			"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0"
	};
}
